﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Data.Common;
using System.Data.SqlTypes;
using System.ComponentModel;

namespace BibliotecaClases
{
    class CADNoticias
    {
        string cadena = SingletonCadenaConexion.Instancia.Cadena;
        SqlConnection conexion;
        DataSet ds;
        SqlDataAdapter da;

        public string InsertarNoticia(ENNoticias noticia)
        {
            string retorno = "";
            try
            {
                conexion = new SqlConnection(cadena);
                da = new SqlDataAdapter("select * from Noticias", conexion);
                ds = new DataSet();
                da.Fill(ds, "Noticias");
                DataTable t = new DataTable();
                t = ds.Tables["Noticias"];
                DataRow nuevafila = t.NewRow();
                nuevafila[1] = noticia.Titulo;
                nuevafila[2] = noticia.Descripcion;
                nuevafila[3] = noticia.Fecha;
                nuevafila[4] = noticia.Administrador;
                nuevafila[5] = noticia.Vendedor;
                nuevafila[6] = noticia.Mecanico;
                nuevafila[7] = noticia.Animador;
                nuevafila[8] = noticia.Web;
                nuevafila[9] = 1;

                t.Rows.Add(nuevafila);
                SqlCommandBuilder cbuilder = new SqlCommandBuilder(da);
                if (da.Update(ds, "Noticias") == 0) //si el nº d filas actualizadas correctamente no es 0
                    retorno = "ERROR al insertar";
            }
            catch (SqlException sqlEx)
            {
                return "ERROR relacionado con la base de datos.\nDetalles:\n" + sqlEx.Message;
            }
            catch (Exception ex)
            {
                return "ERROR al intentar insertar una noticia.\nDetalles:\n" + ex.Message;
            }
            return retorno;
        }

        public DataSet ObtenerTablaNoticias()
        {
            try
            {
                conexion = new SqlConnection(cadena);
                da = new SqlDataAdapter("select * from Noticias where visible = 1", conexion);
                ds = new DataSet();
                da.Fill(ds, "Noticias");
                return ds;
            }
            catch (Exception ex)
            {
                return null;
            }
        }

        public string EliminarNoticia(ENNoticias noticia)
        {
            string retorno = "";
            try
            {
                conexion = new SqlConnection(cadena);
                da = new SqlDataAdapter("select * from Noticias where titulo = '" + noticia.Titulo + "' and visible = 1", conexion);
                ds = new DataSet();
                da.Fill(ds, "Noticias");
                ds.Tables["Noticias"].Rows[0][9] = 0;


                SqlCommandBuilder cbuilder = new SqlCommandBuilder(da);
                if (da.Update(ds, "Noticias") == 0) //si no se ha actualizado ninguna fila
                    retorno = "ERROR al modificar la noticia: " + noticia.Titulo;

                return retorno;
            }
            catch (SqlException sqlEx)
            {
                return "ERROR relacionado con la base de datos. Noticia: " + noticia.Titulo + ".\nDetalles:\n" + sqlEx.Message;
            }
            catch (Exception ex)
            {
                return "ERROR al modificar la noticia: " + noticia.Titulo + ".\nDetalles:\n" + ex.Message;
            }
        }

        public string ModificarNoticia(ENNoticias noticia)
        {
            string retorno = "";
            try
            {
                conexion = new SqlConnection(cadena);
                da = new SqlDataAdapter("select * from Noticias where titulo = '" + noticia.Titulo + "' and visible = 1", conexion);
                ds = new DataSet();
                da.Fill(ds, "Noticias");
                ds.Tables["Noticias"].Rows[0][1] = noticia.Titulo;
                ds.Tables["Noticias"].Rows[0][2] = noticia.Descripcion;
                ds.Tables["Noticias"].Rows[0][3] = noticia.Fecha;
                ds.Tables["Noticias"].Rows[0][4] = noticia.Administrador;
                ds.Tables["Noticias"].Rows[0][5] = noticia.Vendedor;
                ds.Tables["Noticias"].Rows[0][6] = noticia.Mecanico;
                ds.Tables["Noticias"].Rows[0][7] = noticia.Animador;
                ds.Tables["Noticias"].Rows[0][8] = noticia.Web;
                
                SqlCommandBuilder cbuilder = new SqlCommandBuilder(da);
                if (da.Update(ds, "Noticias") == 0) //si no se ha actualizado ninguna fila
                    retorno = "ERROR al modificar la noticia: " + noticia.Titulo;

                return retorno;
            }
            catch (SqlException sqlEx)
            {
                return "ERROR relacionado con la base de datos. Noticia: " + noticia.Titulo + ".\nDetalles:\n" + sqlEx.Message;
            }
            catch (Exception ex)
            {
                return "ERROR al modificar la noticia: " + noticia.Titulo + ".\nDetalles:\n" + ex.Message;
            }
        }

        public DataSet BuscarNoticia(string titulo, string descripcion, string fecha, int administrador, int vendedor, int mecanico, int animador, int web)
        {
            string consulta = "select * from Noticias ";
            string aux = "";
            if (titulo != "")
            {
                consulta += "where titulo ='" + titulo + "'";
                aux = " and ";
            }
            if (descripcion != "")
            {
                if (aux == "")
                    aux = " where";
                consulta += aux + " descripcion like '" + descripcion + "%'";
            }
            /*if (fecha != "")
            {
                if (aux == "")
                    aux = " where";
                else
                    aux = " and";
                consulta += aux + " fecha like '" + fecha + "%'";
            }*/
            if (administrador != 0)
            {
                if (aux == "")
                    aux = " where";
                else
                    aux = " and";
                consulta += aux + " administrador = 1";
            }
            if (vendedor != 0)
            {
                if (aux == "")
                    aux = " where";
                else
                    aux = " and";
                consulta += aux + " vendedor = 1";
            }

            if (mecanico != 0)
            {
                if (aux == "")
                    aux = " where";
                else
                    aux = " and";
                consulta += aux + " mecanico = 1";
            }
            if (animador != 0)
            {
                if (aux == "")
                    aux = " where";
                else
                    aux = " and";
                consulta += aux + " animador = 1";
            }
            try
            {
                conexion = new SqlConnection(cadena);
                da = new SqlDataAdapter(consulta, conexion);
                ds = new DataSet();
                da.Fill(ds, "Noticias");
                return ds;
            }
            catch (Exception)
            {
                return null;
            }
        }

    }
}
